// pages/attention/attention.js
import myaudio from "../../app"
var app = getApp()
Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 播放列表
    audiolist: [],
    // 设备可用高度
    heights: "",
    // 是否正在播放
    isPlaying: false,
    // 旋转角度
    degs: "0",
    // 总时长
    allTime: "00:00",
    // 处理好的当前时间
    nowTime: "00:00",
    // 当前时间（秒）
    nowTimes: "",
    // 进度
    audioTime: "0",
    // 当前图片
    URL: "",
    // 当前播放歌曲序号
    idx: 0,
    // 播放方式
    PlayMode: 1,
    // 旋转定时器
    rotatingTimer: 0,
    // 当前歌曲名
    nowSongName: "",
    // 当前歌手名
    nowArtist: "",
    // 播放列表遮罩层显示隐藏
    songListShow: false,
    // 播放列表动画
    animation: '',
    // 喜欢状态
    likeState: false,
    // 菜单列表遮罩层显示隐藏
    menuMask: false,
    // 菜单列表状态 
    menuFlog: false,
    // 菜单动画
    animation1: '',
    host: 'http://192.168.0.26:8081',
    operateData: {},
    // 收藏全部动画
    animations1: "",
    //  收藏全部遮罩层显示隐藏
    menuCollect: false,
    // 我喜欢的歌曲数
    likeMusics: 0,
    // 我的歌单
    meSongList: [],
    hidden: true,
    // 是否显示歌词
    lyricFlog: false,
    lyricText: "",
    //文稿数组，转化完成用来在wxml中使用
    storyContent: [],
    //文稿滚动距离
    marginTop: 0,
    //当前正在第几行
    currentIndex222: 0
  },

  // 处理歌词
  parseLyric(text) {
    let result = [];
    var lines = text.split('\n') //切割每一行
    let pattern = /\[\d{2}:\d{2}.\d{2}\]/g; //用于匹配时间的正则表达式，匹配的结果类似[xx:xx.xx]
    // //去掉不含时间的行
    while (!pattern.test(lines[0])) {
      lines = lines.slice(1);
    };

    // //上面用'\n'生成数组时，结果中最后一个为空元素，这里将去掉
    lines[lines.length - 1].length === 0 && lines.pop();
    lines.forEach(function (v /*数组元素值*/, i /*元素索引*/, a /*数组本身*/) {
      //提取出时间[xx:xx.xx]
      var time = v.match(pattern),
        //提取歌词
        value = v.replace(pattern, '');
      // 因为一行里面可能有多个时间，所以time有可能是[xx:xx.xx][xx:xx.xx][xx:xx.xx]的形式，需要进一步分隔
      time.forEach((v1, i1, a1) => {
        //去掉时间里的中括号得到xx:xx.xx
        var t = v1.slice(1, -1).split(':');
        //将结果压入最终数组
        result.push([parseInt(t[0], 10) * 60 + parseFloat(t[1]), value]);
      });
    });

    //最后将结果数组中的元素按时间大小排序，以便保存之后正常显示歌词
    result.sort(function (a, b) {
      return a[0] - b[0];
    });
    return result;
  },

  //去除空白
  sliceNull(lrc) {
    var result = []
    for (var i = 0; i < lrc.length; i++) {
      if (lrc[i][1] == "") {
      } else {
        result.push(lrc[i]);
      }
    }
    return result
  },

  // 给子组件传值
  byValue() {
    this.setData({
      operateData: {
        songName: this.data.nowSongName,
        artist: this.data.nowArtist ? this.data.nowArtist : "暂无",
        album: this.data.audiolist[this.data.idx].album,
        id: this.data.audiolist[this.data.idx].id,
        musicCode: this.data.audiolist[this.data.idx].musicCode
      }
    })
    this.selectComponent(".operate").getDate()
  },

  // 进度条拖动事件
  sliderChange(e) {
    var value = e.detail.value;
    app.sliderChange(value);
    // 获取音频播放时间和进度
    this.timess();
    // 旋转
    this.rotate();
    this.setData({
      isPlaying: app.globalData.isPlaying
    })
  },

  // 分享
  share() {
  },

  // 喜欢
  like() {
    let token = wx.getStorageSync("token");
    if (token == 1) {
      this.setData({ likeState: !this.data.likeState })
      let userCode = wx.getStorageSync('userCode');
      let musicCode = this.data.audiolist[this.data.idx].musicCode
      if (this.data.likeState) {
        // 添加喜爱
        wx.request({
          url: this.data.host + `/userLike/addUserLike`,
          method: "post",
          data: {
            userCode: userCode,
            musicCode: musicCode
          },
          success: (res) => {
            if (res.data.msg != "操作成功") {
              this.setData({ likeState: !this.data.likeState })
            }
          }
        })
      } else {
        // 取消喜爱
        wx.request({
          url: this.data.host + `/userLike/deleteUserLike`,
          method: "post",
          data: {
            userCode: userCode,
            musicCode: musicCode
          },
          success: (res) => {
            if (res.data.msg != "操作成功") {
              this.setData({ likeState: !this.data.likeState })
            }
          }
        })
      }
    } else {
      wx.showModal({
        title: "请先登录",
        cancelColor: 'cancelColor',
      })
    }
  },

  // 播放方式
  playMode(e) {
    var val = e.currentTarget.dataset.val;
    app.playMode(val);
    this.setData({
      PlayMode: app.globalData.PlayMode
    })
  },

  // 上一曲
  down() {
    app.down();
    // 获取数据
    this.getData();
    // 获取音频播放时间和进度
    this.timess();
    // 旋转
    this.rotate();
  },

  // 下一曲
  next() {
    app.next();
    // 获取数据
    this.getData();
    // 获取音频播放时间和进度
    this.timess();
    // 旋转
    this.rotate();
  },

  // 暂停
  pause() {
    app.pause();
    this.setData({ isPlaying: app.globalData.isPlaying })
    // 获取音频播放时间和进度
    this.timess();
  },

  // 播放
  play(e) {
    var index = e.currentTarget.dataset.idx;
    app.play(index);
    this.setData({ isPlaying: app.globalData.isPlaying });
    // 获取音频播放时间和进度
    this.timess();
    // 旋转
    this.rotate();
  },

  // 旋转
  rotate() {
    clearInterval(this.data.rotatingTimer)
    var time = setInterval(() => {
      if (this.data.degs > 360) {
        this.data.degs = 0
      }
      if (!this.data.isPlaying) {
        clearInterval(time)
      }
      this.setData({
        degs: Number(this.data.degs) + 0.5
      })
    }, 20)
    this.setData({ rotatingTimer: time });
  },

  // 设置背景高度为设备可用高度
  SetBgHeight() {
    var that = this;
    wx.getSystemInfo({
      success: function (res) {
        // 获取设备可用高度
        that.setData({
          heights: res.windowHeight
        })
      }
    })
  },

  // 播放列表
  popup() {
    this.setData({ songListShow: true })
    this.animation.bottom(10).step() //对动画进行简单的描述
    this.setData({
      animation: this.animation.export()
    })
  },

  // 收起播放列表
  masks() {
    this.setData({ songListShow: false })
    this.animation.bottom(-500).step() //对动画进行简单的描述
    this.setData({
      animation: this.animation.export()
    })
  },

  // 删除
  del(e) {
    app.del(e.currentTarget.dataset.idx);
  },

  // 获取当前播放时间和进度
  timess() {
    let timess = setInterval(() => {
      if (!app.globalData.isPlaying) {
        clearInterval(timess)
      }
      this.setData({
        audioTime: app.globalData.audioTime,
        nowTime: app.globalData.nowTime
      })
    }, 1000)
  },

  // 获取数据
  getData() {
    if (app.globalData.audiolist.length != 0) {
      this.setData({
        URL: app.globalData.URL,
        audiolist: app.globalData.audiolist,
        nowSongName: app.globalData.nowSongName,
        nowArtist: app.globalData.nowArtist ? app.globalData.nowArtist : "暂无",
        allTime: app.globalData.allTime,
        isPlaying: app.globalData.isPlaying,
        PlayMode: app.globalData.PlayMode,
        idx: app.globalData.idx,
      })
      // 给子组件传值
      this.byValue();

      this.setData({
        lyricText: this.data.audiolist[this.data.idx].musicLyric
      })

      this.setData({
        storyContent: this.sliceNull(this.parseLyric(this.data.lyricText))
      })

      // 判断挡墙歌曲是否为喜欢
      this.isLike();
    } else {

      wx.showToast({
        title: '失败',//提示文字
        duration: 1000,//显示时长
        mask: true,//是否显示透明蒙层，防止触摸穿透，默认：false  
        icon: 'error', //图标，支持"success"、"loading"  
        complete: function () {
          setTimeout(() => {
            wx.navigateBack({
              delta: 1
            })
          }, 1000)
        } //接口调用结束的回调函数  
      })
    }
  },

  // 菜单
  menu() {
    this.setData({ menuMask: true });
    this.animation.bottom(0).step() //对动画进行简单的描述
    this.setData({
      animation1: this.animation.export()
    })
  },

  // 收起菜单列表
  menuMasks() {
    this.setData({ menuMask: false });
    this.animation.bottom(-500).step() //对动画进行简单的描述
    this.setData({
      animation1: this.animation.export()
    })
    this.selectComponent(".operate").menu()
  },

  // 判断是否为喜欢
  isLike() {
    let userCode = wx.getStorageSync('userCode');
    wx.request({
      url: this.data.host + `/userLike/getUserLikeByUserCode`,
      method: "post",
      data: {
        userCode: userCode
      },
      success: (res) => {
        let list = res.data.data;
        let nowmusiceid = this.data.audiolist[this.data.idx].id;
        let flog = false;
        if (list.length > 0) {
          for (let i = 0; i < list.length; i++) {
            if (list[i].id == nowmusiceid) {
              flog = true;
              // this.setData({
              //   likeState: true
              // })
              break
            }
          }
          this.setData({
            likeState: flog
          })
        }
      }
    })
  },

  // 收藏全部
  collect() {
    let token = wx.getStorageSync("token");
    if (token == 1) {
      this.setData({ menuCollect: true });
      this.animation.bottom(0).step() //对动画进行简单的描述
      this.setData({
        animations1: this.animation.export()
      })

      // 收起播放列表
      this.masks();

      const operate = this.selectComponent('.operate');
      this.setData({
        meSongList: operate.data.meSongList,
        likeMusics: operate.data.likeMusics
      })
    } else {
      wx.showModal({
        title: "请先登录",
        cancelColor: 'cancelColor',
      })
    }
  },

  // 收起收藏
  menuCollect() {
    this.setData({ menuCollect: false });
    this.animation.bottom(-700).step() //对动画进行简单的描述
    this.setData({
      animations1: this.animation.export()
    })
  },

  // 弹出新建歌单输入框
  NewSongList() {
    this.setData({
      hidden: false
    })
  },

  // 输入框内容改变事件
  inputChange(e) {
    this.setData({
      value: e.detail.value
    })
  },

  // 取消
  cancel: function () {
    this.setData({
      hidden: true
    });
  },

  // 确认
  confirm: function () {
    let userid = wx.getStorageSync('userid');
    let name = this.data.value;
    let myDate = new Date();
    let time = `${myDate.getFullYear()}-${myDate.getMonth() + 1}-${myDate.getDate()}`
    this.setData({
      hidden: true
    });

    if (name.trim() != '') {
      // 添加歌单
      wx.request({
        url: `${this.data.host}/songSheet/addSongSheet`,
        method: "post",
        data: {
          songsheetName: name,
          releaseTime: time,
          userId: userid
        },
        success: (res) => {
          if (res.data.msg == "操作成功") {
            wx.showModal({
              title: "添加成功",
              cancelColor: 'cancelColor',
            })
            // this.getSongList();
            const operate = this.selectComponent('.operate');
            operate.getSongList();
            setTimeout(() => {
              this.setData({
                meSongList: operate.data.meSongList
              })
            }, 500)

            // 收起收藏
            this.menuCollect();
          }
        }
      })
    } else {
      wx.showModal({
        title: "内容不能为空",
        cancelColor: 'cancelColor',
      })
    }
  },

  // 添加到我的歌单
  meSong(e) {
    const operate = this.selectComponent('.operate');
    let songSheetId = e.currentTarget.dataset.id;
    let musicIds = '';
    let list = this.data.audiolist;
    for (let i = 0; i < list.length; i++) {
      musicIds += list[i].id + ','
    }
    musicIds = musicIds.slice(0, musicIds.length - 2)
    wx.request({
      url: this.data.host + `/songSheet/addMusicsToSongSheet?songSheetId=${songSheetId}&musicIds=${musicIds}`,
      method: "post",
      success: (res) => {
        if (res.data.msg == "操作成功") {
          wx.showModal({
            title: "添加成功",
            cancelColor: 'cancelColor',
          })

          // 获取用户歌单
          operate.getSongList();
          setTimeout(() => {
            this.setData({
              meSongList: operate.data.meSongList
            })
          }, 500)

          // 收起收藏
          this.menuCollect();
        } else {
          wx.showModal({
            title: "添加失败",
            cancelColor: 'cancelColor',
          })
        }
      }
    })

  },

  // 监听音频进度更新
  onTimeUpDate() {
    var that = this;
    // 背景音频播放进度更新事件
    myaudio.onTimeUpdate(function () {
      if (that.data.currentIndex222 >= 7) {//超过6行开始滚动
        that.setData({
          marginTop: (that.data.currentIndex222 - 6) * 20
        })
      }
      // 文稿对应行颜色改变
      if (that.data.currentIndex222 != that.data.storyContent.length - 1) {//
        var j = 0;
        for (var j = that.data.currentIndex222; j < that.data.storyContent.length; j++) {
          // 当前时间与前一行，后一行时间作比较， j:代表当前行数
          if (that.data.currentIndex222 == that.data.storyContent.length - 2) {
            //最后一行只能与前一行时间比较
            if (parseFloat(myaudio.currentTime) > parseFloat(that.data.storyContent[that.data.storyContent.length - 1][0])) {
              that.setData({
                currentIndex222: that.data.storyContent.length - 1
              })
              return;
            }
          } else {
            if (parseFloat(myaudio.currentTime) > parseFloat(that.data.storyContent[j][0]) && parseFloat(myaudio.currentTime) < parseFloat(that.data.storyContent[j + 1][0])) {
              that.setData({
                currentIndex222: j
              })
              return;
            }
          }
        }
      }
    });
  },

  // 关闭歌词
  closeLyrics() {
    // // 监听音频进度更新
    // this.onTimeUpDate();
    this.setData({
      lyricFlog: false
    })
  },

  // 开启歌词
  openLyric() {
    // 监听音频进度更新
    this.onTimeUpDate();
    this.setData({
      lyricFlog: true
    })
  },

  xxx() {
    console.log("xxx");
    app.getOneMusic(50);
    this.getData();
  },

  // 删除全部
  // deleteAll() {
  //   app.deleteAll();
  // },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 获取数据
    this.getData();
    app.watch(
      (isCanplay) => {
        if (isCanplay) {
          // console.log("player");
          // 获取数据
          this.getData();

          // 获取当前播放时间和进度
          this.timess();

          // 旋转
          this.rotate();
        }
      }
    )
    app.watchIsWrong(
      (isWrong) => {
        if (isWrong) {
          console.log("player1");
          // 获取数据
          this.getData();
          wx.showModal({
            title: "该音乐暂时无法播放",
            cancelColor: 'cancelColor',
          })
        }
      }
    )
    app.watchIsGetData(
      (isGetData) => {
        console.log(isGetData);
        if (isGetData) {
          this.getData();
        }
      })


    // 旋转
    this.rotate()

    // 获取当前播放时间和进度
    this.timess();

    // 设置背景高度为设备可用高度
    this.SetBgHeight()

    // 动画
    this.animation = wx.createAnimation({
      duration: 500,
      timingFunction: 'linear',
      delay: 100,
      transformOrigin: "left top 0"
    })

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})